call gdk_event_request_motions() for new motion events after receiving
authorTim Janik <timj@imendio.com>
Tue, 6 Feb 2007 14:53:35 +0000 (14:53 +0000)
committerTim Janik <timj@src.gnome.org>
Tue, 6 Feb 2007 14:53:35 +0000 (14:53 +0000)
Tue Feb  6 15:53:59 2007  Tim Janik  <timj@imendio.com>

        * gtk/gtktextview.c (gtk_text_view_motion_event):
        * gtk/gtkspinbutton.c (gtk_spin_button_motion_notify):
        * gtk/gtkaboutdialog.c (credits_motion_notify_event):
        * gtk/gtkhruler.c (gtk_hruler_motion_notify):
        * gtk/gtkvruler.c (gtk_vruler_motion_notify):
        * gtk/gtkentry.c (gtk_entry_motion_notify):
        * gtk/gtktooltip.c (_gtk_tooltip_handle_event):
        * gtk/gtkhsv.c (gtk_hsv_motion): call gdk_event_request_motions()
        for new motion events after receiving motion hints.

        * gdk/gdkevents.[hc]: added gdk_event_request_motions().

svn path=/trunk/; revision=17269

ChangeLog
gdk/gdkevents.c
gdk/gdkevents.h
gtk/gtkaboutdialog.c
gtk/gtkentry.c
gtk/gtkhruler.c
gtk/gtkhsv.c
gtk/gtkspinbutton.c
gtk/gtktextview.c
gtk/gtktooltip.c
gtk/gtkvruler.c

index 3f207ad26b1aeacfe6dc3f1de75058885c9eaeb1..59dcfd0cb032b96cfa33e3868d5e031a7520f2ee 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+Tue Feb  6 15:53:59 2007  Tim Janik  <timj@imendio.com>
+
+       * gtk/gtktextview.c (gtk_text_view_motion_event):
+       * gtk/gtkspinbutton.c (gtk_spin_button_motion_notify):
+       * gtk/gtkaboutdialog.c (credits_motion_notify_event):
+       * gtk/gtkhruler.c (gtk_hruler_motion_notify):
+       * gtk/gtkvruler.c (gtk_vruler_motion_notify): 
+       * gtk/gtkentry.c (gtk_entry_motion_notify):
+       * gtk/gtktooltip.c (_gtk_tooltip_handle_event):
+       * gtk/gtkhsv.c (gtk_hsv_motion): call gdk_event_request_motions()                              
+       for new motion events after receiving motion hints.
+
+       * gdk/gdkevents.[hc]: added gdk_event_request_motions().
+
 2007-02-06  Kristian Rietveld  <kris@imendio.com>
 
        * gtk/gtktooltip.c (find_topmost_widget_coords_from_event):
index ac6cd59d2eba6544f0f8d0f90b8e9273899ad327..fcc755972144f9ea58cc277128aa51f4bae96dd5 100644 (file)
@@ -834,6 +834,26 @@ gdk_event_get_axis (GdkEvent   *event,
   return gdk_device_get_axis (device, axes, axis_use, value);
 }
 
+/**
+ * gdk_event_request_motions:
+ * @event: a valid #GdkEvent
+ *
+ * Request more motion notifies if #event is a motion notify hint event.
+ * This funciton should be used instead of gdk_window_get_pointer() to
+ * request further motion notifies, because it also works for extension
+ * events where motion notifies are provided for devices other than the
+ * core pointer.
+ *
+ * Since: 2.12
+ **/
+void
+gdk_event_request_motions (GdkEventMotion *event)
+{
+  g_return_if_fail (event != NULL);
+  if (event->type == GDK_MOTION_NOTIFY && event->is_hint)
+    gdk_device_get_state (event->device, event->window, NULL, NULL);
+}
+
 /**
  * gdk_event_set_screen:
  * @event: a #GdkEvent
index 6c5ea277dc79273e9e043b1e2e5c5dcdcdecae2f..5a30e99a32a4c65d32f00437e76485a3804d0fe5 100644 (file)
@@ -529,6 +529,7 @@ gboolean  gdk_event_get_root_coords (GdkEvent        *event,
 gboolean  gdk_event_get_axis            (GdkEvent        *event,
                                          GdkAxisUse       axis_use,
                                          gdouble         *value);
+void      gdk_event_request_motions     (GdkEventMotion  *event);
 void     gdk_event_handler_set         (GdkEventFunc    func,
                                         gpointer        data,
                                         GDestroyNotify  notify);
index 863ac53ca88f7c36f0156dee6b0d6b884340bd26..38bd2c6213629bc878c1733136b9f09c1cb80628 100644 (file)
@@ -1781,7 +1781,7 @@ credits_motion_notify_event (GtkWidget *text_view,
 
   set_cursor_if_appropriate (about, GTK_TEXT_VIEW (text_view), x, y);
 
-  gdk_window_get_pointer (text_view->window, NULL, NULL, NULL);
+  gdk_event_request_motions (event);
 
   return FALSE;
 }
index 35445f8fcb9e04f8e6773d372d156f261595b9d7..9da426264a24f54f7a5d9462a9e241529ac50b95 100644 (file)
@@ -1872,8 +1872,8 @@ gtk_entry_motion_notify (GtkWidget      *widget,
   if (entry->select_lines)
     return TRUE;
 
-  if (event->is_hint || (entry->text_area != event->window))
-    gdk_window_get_pointer (entry->text_area, NULL, NULL, NULL);
+  if (entry->text_area != event->window)
+    gdk_event_request_motions (event);
 
   if (entry->in_drag)
     {
index 94d00b51465f9028ccba54918b5b20d11451c5ec..93ccff4478cd23bc4d2b34c842928bbcf08414ce 100644 (file)
@@ -89,10 +89,8 @@ gtk_hruler_motion_notify (GtkWidget      *widget,
 
   ruler = GTK_RULER (widget);
 
-  if (event->is_hint)
-    gdk_window_get_pointer (widget->window, &x, NULL, NULL);
-  else
-    x = event->x;
+  gdk_event_request_motions (event);
+  x = event->x;
 
   ruler->position = ruler->lower + ((ruler->upper - ruler->lower) * x) / widget->allocation.width;
   g_object_notify (G_OBJECT (ruler), "position");
index 0bd8ff2decb78aedff2a26622783332b9bc0c0d2..6c4723048ea6bc1eb5623bf940bbc3ccbfe07c79 100644 (file)
@@ -851,18 +851,11 @@ gtk_hsv_motion (GtkWidget      *widget,
   if (priv->mode == DRAG_NONE)
     return FALSE;
   
-  if (event->is_hint)
-    {
-      gdk_window_get_pointer (priv->window, &ix, &iy, &mods);
-      x = ix;
-      y = iy;
-    }
-  else
-    {
-      x = event->x;
-      y = event->y;
-    }
-  
+  gdk_event_request_motions (event);
+  x = event->x;
+  y = event->y;
+  mods = event->state;
+
   if (priv->mode == DRAG_H)
     {
       gtk_hsv_set_color (hsv, compute_v (hsv, x, y), priv->s, priv->v);
index 741924551e4340c11f01c5a67de442b02808d1f0..bf2e59632b52066e2c9d6d1b7bc976d48b23a8ad 100644 (file)
@@ -1148,9 +1148,9 @@ gtk_spin_button_motion_notify (GtkWidget      *widget,
 
   if (event->window == spin->panel)
     {
-      gint y;
-      
-      gdk_window_get_pointer (spin->panel, NULL, &y, NULL);
+      gint y = event->y;
+
+      gdk_event_request_motions (event);
   
       if (y <= widget->requisition.height / 2 && 
          spin->in_child == GTK_ARROW_DOWN)
index 2e82d2445e752c39b47bf4aa764863d2910b6655..931b0304de4961beac6b3168d644a8d9f421c63d 100644 (file)
@@ -4170,10 +4170,10 @@ gtk_text_view_motion_event (GtkWidget *widget, GdkEventMotion *event)
   if (event->window == text_view->text_window->bin_window &&
       text_view->drag_start_x >= 0)
     {
-      gint x, y;
+      gint x = event->x;
+      gint y = event->y;
 
-      gdk_window_get_pointer (text_view->text_window->bin_window,
-                              &x, &y, NULL);
+      gdk_event_request_motions (event);
 
       if (gtk_drag_check_threshold (widget,
                                    text_view->drag_start_x, 
index 047cdd877fa52352031ca0cb5448a3807cc9db39..fbce27ff20052209c5f7da6218ab1130d2d7d93b 100644 (file)
@@ -997,8 +997,7 @@ _gtk_tooltip_handle_event (GdkEvent *event)
     }
 
   /* Always poll for a next motion event */
-  if (event->type == GDK_MOTION_NOTIFY && event->motion.is_hint)
-    gdk_window_get_pointer (event->any.window, NULL, NULL, NULL);
+  gdk_event_request_motions (&event->motion);
 
   /* Hide the tooltip when there's no new tooltip widget */
   if (!has_tooltip_widget)
index 0c08c186612ffa9d6d2235ce98228326c96cbd8e..1c8419c8507b5bb1cbf76d16528ecb2b44bcd1b2 100644 (file)
@@ -90,10 +90,8 @@ gtk_vruler_motion_notify (GtkWidget      *widget,
 
   ruler = GTK_RULER (widget);
 
-  if (event->is_hint)
-    gdk_window_get_pointer (widget->window, NULL, &y, NULL);
-  else
-    y = event->y;
+  gdk_event_request_motions (event);
+  y = event->y;
 
   ruler->position = ruler->lower + ((ruler->upper - ruler->lower) * y) / widget->allocation.height;
   g_object_notify (G_OBJECT (ruler), "position");